package org.yxk.haddop;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.commons.logging.Log;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Test {
	public static void main(String[] args) throws IOException {
		FileSystem fs = getHadoopFileSystem();
		boolean success = fs.mkdirs(new Path("/javaTest"));
        System.out.println(success);
		/*Path HDFSPath = new Path("E:/Users/ab562/Documents/hadoop2.2.0伪分布式搭建.txt");
        Path localPath = new Path("/home/huabingood");    
        fs.copyToLocalFile(HDFSPath,localPath);*/
	}
	/**
	                 * 根据配置文件获取HDFS操作对象
	                 * 有两种方法：
	                 *  1.使用conf直接从本地获取配置文件创建HDFS对象
	                 *  2.多用于本地没有hadoop系统，但是可以远程访问。使用给定的URI和用户名，访问远程的配置文件，然后创建HDFS对象。
	                 * @return FileSystem
	                 */
	                public static FileSystem getHadoopFileSystem() {
	            
	            
	                    FileSystem fs = null;
	                    Configuration conf = null;
	            
	                    // 方法一，本地有配置文件，直接获取配置文件（core-site.xml，hdfs-site.xml）
	                    // 根据配置文件创建HDFS对象
	                    // 此时必须指定hdsf的访问路径。
	                  /*  conf = new Configuration();
	                    // 文件系统为必须设置的内容。其他配置参数可以自行设置，且优先级最高
	                    conf.set("fs.defaultFS", "hdfs://huabingood01:9000");
	            
	                    try {
	                        // 根据配置文件创建HDFS对象
	                        fs = FileSystem.get(conf);
	                    } catch (IOException e) {
	                        e.printStackTrace();
	                        logger.error("",e);
	                    }*/
	            
	                    // 方法二：本地没有hadoop系统，但是可以远程访问。根据给定的URI和用户名，访问hdfs的配置参数
	                    // 此时的conf不需任何设置，只需读取远程的配置文件即可。
	                   conf = new Configuration();
	                    // Hadoop的用户名
	                    String hdfsUserName = "";
	            
	                    URI hdfsUri = null;
	                    try {
	                        // HDFS的访问路径
	                        hdfsUri = new URI("hdfs://192.168.0.11:9000");
	                    } catch (URISyntaxException e) {
	                        e.printStackTrace();
	                     
	                    }
	            
	                    try {
	                        // 根据远程的NN节点，获取配置信息，创建HDFS对象
	                        fs = FileSystem.get(hdfsUri,conf,null);
	                    } catch (IOException e) {
	                        e.printStackTrace();
	                        
	                    } catch (InterruptedException e) {
	                        e.printStackTrace();
	                       
	                    }
	            
	                    // 方法三，反正我们没有搞懂。
	                    /*conf  = new Configuration();
	                    conf.addResource("/opt/huabingood/pseudoDistributeHadoop/hadoop-2.6.0-cdh5.10.0/etc/hadoop/core-site.xml");
	                    conf.addResource("/opt/huabingood/pseudoDistributeHadoop/hadoop-2.6.0-cdh5.10.0/etc/hadoop/hdfs-site.xml");
	            
	                    try {
	                        fs = FileSystem.get(conf);
	                    } catch (IOException e) {
	                        e.printStackTrace();
	                        logger.error(e);
	                    }*/
	            
	                    return fs;
	                }
}

